<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!-- コンテナをロード -->
  <script type="text/javascript" src="../src/container.js" ></script>
</head>
<body>
  <div id="stdout"></div>
  <script type="text/javascript">
var stdout = document.getElementById( "stdout" );

// クラス
function Kitten( name, age ) {
    this.name = name;
    this.age = age;
}
Kitten.prototype = {
   getName: function () { return this.name; },
   getAge:  function () { return this.age; }
};

var c = new container.Container( function( binder ) {

  binder.bind( Kitten ).to( "mii"  ).inject( { "name": "mii",  "age":1 });
  binder.bind( Kitten ).to( "tora" ).inject( { "name": "tora", "age":2 });

  // グローバルインターセプターの設定
  binder.bindInterceptor( function ( mi ) {
      return mi.proceed() + "_global"; // 結果の末尾に"_global"を付けて返す。
    },
    container.any(),  // 適用するコンポーネントを示すcontainer.Matcher // この場合すべてのコンポーネントが対象
    container.any()); // 適用するメソッドを示すcontainer.Matcher // この場合すべてのメソッドが対象
  
  // Typeでの指定
  binder.bindInterceptor( function ( mi ) {
      return mi.proceed() + "_global2"; // 結果の末尾に"_global2"を付けて返す。
    },
    container.types.has("getName"),  // 適用するコンポーネントを示すcontainer.Type // この場合、getNameを持つものが対象
    new container.Matcher(/getName/)); 

});

var mii = c.get( "mii" );
stdout.innerHTML += mii.getName() + " : " + mii.getAge() + "<br/>"; // mii_global_global2 : 1_global
var tora = c.get( "tora" );
stdout.innerHTML += tora.getName() + " : " + tora.getAge() + "<br/>";  // tora_global_global2 : 2_global

  </script>
</body>
</html>